package treemap01;
/*
//TreeSet底层依赖的是TreeMap
//HashSet底层依赖的是HashMap
//从本质上来说根本"不存在" HashSet TreeSet,因为无论使用HashSet还是TreeSet最终都会使用其对应的Map
//HashSet存储元素保证唯一和HashMap的key的唯一性原理相同(均依赖hashCode()和equals()方法)
//TreeSet存储元素排序原理和TreeMap的key的排序原理相同(均可使用自然排序和比较器排序)
public class TreeSet<E>{

    //成员变量的m最终通过TreeSet的构造方法赋值了一个TreeMap
    //相当于 NavigableMap<E,Object> m = new TreeMap<>();

    NavigableMap<E,Object> m;

    static final Object PRESENT = new Object();

    //new TreeSet()会调用它的空参构造
    public TreeSet() {
        this(new TreeMap<>());//this语句调用下面的构造方法
    }

    TreeSet(NavigableMap<E,Object> m) {
        //TreeMap类实现了NavigableMap接口
        this.m = m;
    }


    //TreeSet使用的add方法底层最终使用的是TreeMap的put方法
    //TreeSet的add(元素)相当于 TreeMap的put(元素,new Object())
    //TreeSet添加的元素相当于TreeMap的key
    public boolean add(E e) {
        return m.put(e, PRESENT)==null;
    }

    //TreeSet使用remove方法本质上使用的依然是TreeMap的remove方法
    public boolean remove(Object o) {
        return m.remove(o)==PRESENT;
    }
}*/

